package jsp;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;

/**
 * Author:shixiaojun@itany.com
 * Date:2022/4/12 13:43
 * Version:1.0-SNAPSHOT
 * Description:
 */
@WebServlet("/app")
public class ApplicationServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // application的类型是ServletContext类型
        // 后台获取该对象有两种方式
        // 方式一:直接通过Servlet提供的方法获取
            // 该方式仅限于在Servlet中使用
        ServletContext application = getServletContext();
        // 方式二:通用型,可以在任意方法中使用（不限于Servlet）
            // 前提条件:该方法必须提供request或者session
        ServletContext application2 = request.getServletContext();
        HttpSession session = request.getSession();
        ServletContext application3 = session.getServletContext();
        System.out.println(application);
        System.out.println(application2);
        System.out.println(application3);

        // 可以通过application对象获取与整个应用相关的信息
        // 典型应用:获取服务器所在位置,一般用于文件上传
        // application.getRealPath(path):获取服务器路径
        // 当参数为空时,获取的是根路径
        // 当传递参数时,获取的是根路径+参数之后生成的路径
        String path = application.getRealPath("");
        String path2 = application.getRealPath("/upload");
        System.out.println("服务器根路径:"+path);
        System.out.println("服务器根路径+upload:"+path2);
        File file = new File(path2);
        file.mkdirs();

        // 获取全局初始化参数的值,通过application对象进行获取
        // application对象本质上是通过ServletConfig进行获取的
        // 严格来说,全局初始化参数的值是通过ServletConfig获取的
        String username = application.getInitParameter("username");
        System.out.println("username:"+username);

    }

}
